using DaoHang.Models;

namespace DaoHang.Services
{
    /// <summary>
    /// 图标服务接口
    /// 提供网站图标的下载、存储和管理功能
    /// </summary>
    public interface IIconService
    {
        /// <summary>
        /// 下载并保存网站图标到本地
        /// </summary>
        /// <param name="iconUrl">外部图标URL</param>
        /// <param name="websiteName">网站名称，用于生成文件名</param>
        /// <returns>本地图标相对路径，如果失败返回null</returns>
        Task<string?> DownloadAndSaveIconAsync(string iconUrl, string websiteName);

        /// <summary>
        /// 从网站URL自动检测并下载图标
        /// </summary>
        /// <param name="websiteUrl">网站URL</param>
        /// <param name="websiteName">网站名称</param>
        /// <returns>本地图标相对路径，如果失败返回默认图标路径</returns>
        Task<string> DetectAndDownloadIconAsync(string websiteUrl, string websiteName);

        /// <summary>
        /// 批量更新所有网站图标
        /// </summary>
        /// <returns>更新结果，包含成功和失败的数量</returns>
        Task<IconUpdateResult> BatchUpdateIconsAsync();

        /// <summary>
        /// 获取默认图标路径
        /// </summary>
        /// <returns>默认图标的相对路径</returns>
        string GetDefaultIconPath();

        /// <summary>
        /// 清理未使用的图标文件
        /// </summary>
        /// <returns>清理的文件数量</returns>
        Task<int> CleanupUnusedIconsAsync();

        /// <summary>
        /// 检查图标文件是否存在
        /// </summary>
        /// <param name="iconPath">图标相对路径</param>
        /// <returns>文件是否存在</returns>
        bool IconExists(string iconPath);

        /// <summary>
        /// 生成默认图标文件
        /// </summary>
        /// <returns>默认图标路径</returns>
        Task<string> GenerateDefaultIconAsync();
    }

    /// <summary>
    /// 图标更新结果
    /// </summary>
    public class IconUpdateResult
    {
        /// <summary>
        /// 总处理数量
        /// </summary>
        public int TotalCount { get; set; }

        /// <summary>
        /// 成功更新数量
        /// </summary>
        public int SuccessCount { get; set; }

        /// <summary>
        /// 失败数量
        /// </summary>
        public int FailureCount { get; set; }

        /// <summary>
        /// 使用默认图标的数量
        /// </summary>
        public int DefaultIconCount { get; set; }

        /// <summary>
        /// 错误信息列表
        /// </summary>
        public List<string> ErrorMessages { get; set; } = new List<string>();

        /// <summary>
        /// 成功率百分比
        /// </summary>
        public double SuccessRate => TotalCount > 0 ? (double)SuccessCount / TotalCount * 100 : 0;
    }
} 